<?php if (!defined('BASEPATH')) exit('No direct script access allowed.');

/**
 * CodeIgniter Text Helpers
 *
 * @package        CodeIgniter
 * @subpackage    Helpers
 * @category    Helpers
 * @author        Rick Ellis
 * @link        http://www.codeigniter.com/user_guide/helpers/text_helper.html
 */

// ------------------------------------------------------------------------

function nl2p($str)
{
    return str_replace('<p></p>', '', '<p>'
                                      . nl2br(preg_replace('#([\r\n]\s*?[\r\n]){2,}#', '</p>$0<p>', $str))
                                      . '</p>');
}

// ------------------------------------------------------------------------

/**
 * Returns a string with all spaces converted to underscores (by default), accented
 * characters converted to non-accented characters, and non word characters removed.
 *
 * @param string $string the string you want to slug
 * @param string $replacement will replace keys in map
 * @return string
 * @access public
 */
function convert_accented_characters($string, $replacement = '-')
{
    $string = strtolower($string);
    $coDau = array("à", "á", "ạ", "ả", "ã", "â", "ầ", "ấ", "ậ", "ẩ", "ẫ", "ă", "ằ", "ắ"
    , "ặ", "ẳ", "ẵ", "è", "é", "ẹ", "ẻ", "ẽ", "ê", "ề", "ế", "ệ", "ể", "ễ", "ì", "í", "ị", "ỉ", "ĩ",
                   "ò", "ó", "ọ", "ỏ", "õ", "ô", "ồ", "ố", "ộ", "ổ", "ỗ", "ơ"
    , "ờ", "ớ", "ợ", "ở", "ỡ",
                   "ù", "ú", "ụ", "ủ", "ũ", "ư", "ừ", "ứ", "ự", "ử", "ữ",
                   "ỳ", "ý", "ỵ", "ỷ", "ỹ",
                   "đ",
                   "À", "Á", "Ạ", "Ả", "Ã", "Â", "Ầ", "Ấ", "Ậ", "Ẩ", "Ẫ", "Ă"
    , "Ằ", "Ắ", "Ặ", "Ẳ", "Ẵ",
                   "È", "É", "Ẹ", "Ẻ", "Ẽ", "Ê", "Ề", "Ế", "Ệ", "Ể", "Ễ",
                   "Ì", "Í", "Ị", "Ỉ", "Ĩ",
                   "Ò", "Ó", "Ọ", "Ỏ", "Õ", "Ô", "Ồ", "Ố", "Ộ", "Ổ", "Ỗ", "Ơ"
    , "Ờ", "Ớ", "Ợ", "Ở", "Ỡ",
                   "Ù", "Ú", "Ụ", "Ủ", "Ũ", "Ư", "Ừ", "Ứ", "Ự", "Ử", "Ữ",
                   "Ỳ", "Ý", "Ỵ", "Ỷ", "Ỹ",
                   "Đ", "ê", "ù", "à");
    $khongDau = array("a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a"
    , "a", "a", "a", "a", "a", "a",
                      "e", "e", "e", "e", "e", "e", "e", "e", "e", "e", "e",
                      "i", "i", "i", "i", "i",
                      "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o"
    , "o", "o", "o", "o", "o",
                      "u", "u", "u", "u", "u", "u", "u", "u", "u", "u", "u",
                      "y", "y", "y", "y", "y",
                      "d",
                      "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A"
    , "A", "A", "A", "A", "A",
                      "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E",
                      "I", "I", "I", "I", "I",
                      "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"
    , "O", "O", "O", "O", "O",
                      "U", "U", "U", "U", "U", "U", "U", "U", "U", "U", "U",
                      "Y", "Y", "Y", "Y", "Y",
                      "D", "e", "u", "a");
    return str_replace($coDau, $khongDau, $string);
}

// ------------------------------------------------------------------------

function escape_tags($string)
{
    return str_replace(array('{', '}'), array('&#123;', '&#125;'), $string);
}

// ------------------------------------------------------------------------

/**
 * Proccess data JMR1
 *
 * Minifying final HTML output
 *
 * @access    public
 * @param    string    The HTML output
 * @return    string  The HTML without white spaces or the input text if its is too big to your SO proccess.
 * @author    Alan Moore, ridgerunner <http://stackoverflow.com/q/5312349>
 * @author    Marcos Coelho <marcos@marcoscoelho.com>
 */

// Set PCRE recursion limit to sane value = STACKSIZE / 500 (256KB stack. Win32 Apache or  8MB stack. *nix)
ini_set('pcre.recursion_limit', (strtolower(substr(PHP_OS, 0, 3)) === 'win' ? '524' : '16777'));

function process_data_jmr1($text = '')
{
    $re = '%                                # Collapse whitespace everywhere but in blacklisted elements.
        (?>                                 # Match all whitespans other than single space.
          [^\S]\s*                          # Either one [\t\r\n\f\v] and zero or more ws,
          |\s{2,}                           # or two or more consecutive-any-whitespace.
        )				                    # Note: The remaining regex consumes no text at all...
        (?=                                 # Ensure we are not in a blacklist tag.
          [^<]*+                            # Either zero or more non-"<" {normal*}
          (?:                               # Begin {(special normal*)*} construct
            <                               # or a < starting a non-blacklist tag.
            (?!/?(?:textarea|pre|script)\b)
            [^<]*+                          # more non-"<" {normal*}
          )*+                               # Finish "unrolling-the-loop"
          (?:                               # Begin alternation group.
            <                               # Either a blacklist start tag.
            (?>textarea|pre|script)\b
            |\z                             # or end of file.
          )                                 # End alternation group.
        )                                   # If we made it here, we are not in a blacklist tag.
        %Six';

    if (($data = preg_replace($re, ' ', $text)) === NULL) {
        log_message('error', 'PCRE Error! Output of the page "' . uri_string() . '" is too big.');

        return $text;
    }

    return $data;
}